package com.hnu.tockmarket.fragment;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.widget.Toolbar;

import com.getbase.floatingactionbutton.FloatingActionButton;
import com.hnu.tockmarket.R;
import com.hnu.tockmarket.constant.SystemConstants;

/**
 * 经济新闻页面对应的活动
 *
 * @author hnulht
 * @since 2021-07-09
 */
public class NewFragment extends BaseFragment {

    private static final String TAG = "NewFragment"; // 日志
    private static final String targetUrl = SystemConstants.WEB_APP_NEW_URL;
    private Toolbar toolbar; // 经济新闻工具栏控件
    private WebView webView; // 经济新闻网页视图控件
    private FloatingActionButton floatingActionButton; // 返回顶部悬浮按钮控件

    /**
     * 初始化经济新闻视图
     *
     * @return view
     */
    @Override
    public View initView() {
        Log.i(TAG, "初始化经济新闻视图");
        View view = View.inflate(getContext(), R.layout.fragment_new, null);
        // 定位经济新闻网页视图, 初始化网页视图配置, 加载URL指定的网页
        webView = view.findViewById(R.id.new_wv);
        initWebViewSettings();
        webView.loadUrl(targetUrl);
        // 定位工具栏并设置点击事件
        toolbar = view.findViewById(R.id.new_tb);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                webView.loadUrl(targetUrl); // 重载URL指定的网页
            }
        });
        // 定位返回顶部悬浮按钮控件并设置点击事件
        floatingActionButton = view.findViewById(R.id.new_fab);
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                webView.loadUrl(targetUrl); // 重载URL指定的网页
            }
        });
        return view;
    }

    /**
     * 初始化网页视图配置
     */
    @SuppressLint("SetJavaScriptEnabled")
    public void initWebViewSettings() {
        // 支持Javascript
        webView.getSettings().setJavaScriptEnabled(true);
        // 支持viewport属性
        webView.getSettings().setUseWideViewPort(true);
        // 使用overview mode加载页面, 当页面宽度大于WebView宽度时, 缩小使页面宽度等于WebView宽度
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                WebView.HitTestResult hit = view.getHitTestResult();
                // hit.getExtra()为null或者hit.getType()==0都表示即将加载的URL会发生重定向, 需要做拦截处理
                if (TextUtils.isEmpty(hit.getExtra()) || hit.getType() == 0) {
                    // 通过判断开头协议就可解决大部分重定向问题, 有另外的需求可以在此判断下操作
                    Log.e(TAG, "redirect: " + hit.getType() + " && EXTRA()" + hit.getExtra() + "------");
                    Log.e(TAG, "GetURL: " + view.getUrl() + "\n" + "getOriginalUrl()" + view.getOriginalUrl());
                    Log.d(TAG, "URL: " + url);
                }
                if (url.startsWith("http://") || url.startsWith("https://")) { // 加载的url是http/https协议地址
                    view.loadUrl(url);
                    return false; //返回false表示此url默认由系统处理, url未加载完成, 会继续往下走
                } else { // 加载的url是自定义协议地址
                    try {
                        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return true;
                }
            }
        });
        // 获取焦点
        webView.requestFocus();
    }

    /**
     * 初始化经济新闻数据
     */
    @Override
    public void initData() {
        Log.i(TAG, "初始化经济新闻数据");
        super.initData();
    }

}